package arbori;

/**
 * Clasa ArboreFunctional
 * @author Sorica Alexandra
 */

public class ArboreFunctional {
	
	/**
	 * variabila radacina va retine radacina arborelui ce reprezinta functia ce trebuie derivata
	 */
	
	private Nod radacina;
	
	/**
	 * constructorul clasei Arvore Functional
	 * @param radacina reprezinta radacina arborelui
	 */
	
	public ArboreFunctional(Nod radacina) {
		this.radacina = radacina;
		}
	
	/**
	 * functia calculeazaValoare va calcula valoarea functiei respective intr-un anumit punct
	 * @param x reprezinta valoarea punctului in care dorim sa calculam valoarea functiei
	 * @return o variabila de tipul double ce reprezinta valoarea fct in acel pct
	 */
	
	public double calculeazaValoare(double x){
		radacina.nd.x=x;
		radacina.nd.setX(x);
		radacina.ns.x=x;
		radacina.ns.setX(x);
		return radacina.calculeazaValoare();
		}
	
	/**
	 * returneaza un sir de caractere reprezentand functia
	 */
	
	public String toString(){
		return radacina.toString();
		}
	
	/**
	 * fuctia derivata() se foloseste pentru obtinerea derivatei
	 * @return returneaza un string reprezentand derivata functiei respective
	 */
	
	public String derivata(){
		return radacina.derivare();
		}
	
	/**
	 * se foloseste pentru calculul derivatei intr-un punct
	 * @param x variabila de tipul double reprezentand punctul in care vrem sa calculam valoarea derivatei
	 * @return returneaza o variabila double ce contine valoarea derivatei in acel punct
	 */
	
	public double calculDerivata(double x){
		radacina.nd.x=x;
		radacina.nd.setX(x);
		radacina.ns.x=x;
		radacina.ns.setX(x);
		return radacina.calculDerivata();
		}
	}


